package com.cwnu.sw.cys.core.websocket.domain.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * WebSocket请求类型枚举类
 * 用于定义WebSocket通信中不同类型的请求
 */
@AllArgsConstructor
@Getter
public enum WSReqTypeEnum {
    // 请求登录二维码
    LOGIN(1, "请求登录二维码"),
    // 心跳包，用于维持连接活跃
    HEARTBEAT(2, "心跳包"),
    // 登录认证，用于验证用户登录
    AUTHORIZE(3, "登录认证"),
    ;

    // 类型代码
    private final Integer type;
    // 类型描述
    private final String desc;

    // 缓存，用于快速根据类型代码查找枚举实例
    private static Map<Integer, WSReqTypeEnum> cache;

    // 静态代码块，初始化缓存
    static {
        cache = Arrays.stream(WSReqTypeEnum.values()).collect(Collectors.toMap(WSReqTypeEnum::getType, Function.identity()));
    }

    /**
     * 根据类型代码获取对应的WebSocket请求类型枚举实例
     *
     * @param type 类型代码
     * @return 对应的WebSocket请求类型枚举实例，如果找不到则返回null
     */
    public static WSReqTypeEnum of(Integer type) {
        return cache.get(type);
    }
}
